<?php
namespace Home\Controller;
use Think\Controller;
use Think\Verify;
//header("content-type:text/html;charset=utf-8");编码格式

class IndexController extends Controller{
    public function _initialize()
    {
    }
        
    public function sucai()
    {
        $token = $this->_getAccessToken(C('WECHAT_APP_ID'),C('WECHAT_APP_SECRET'));
        $list = $this->getForeverList($token,'image',0,20);
        echo json_encode($list);
    }

/**
  * 获取永久素材列表
  * @param $token
  * @param $type 类型有image,vedio和audio
  * @param $offset 起始位置，0表示从第一个
  * @param $count 个数，区间为0~20
  */
  public function getForeverList($token,$type,$offset,$count){
   $data = array(
    'type' => $type,
    'offset' => $offset,
    'count' => $count,
   );
   $url = 'https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token='.$token;
   $result = $this->http_curl($url,'post','json',$data);
   echo $result;
  }

    public function index(){
        // $appid = 'wx5c6818578b37fb75';
        // $appsecret = '4b6c2c05625d657d2b1c13f15aa21372';
        // echo "1";
        // die;
        $access_token = $this->_getAccessToken(C('WECHAT_APP_ID'),C('WECHAT_APP_SECRET'));
        // echo $access_token;
        // die;

        //笨重获取access_token 没考虑到失效时间 只是单纯的获取access_token
        // $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx5c6818578b37fb75&secret=4b6c2c05625d657d2b1c13f15aa21372';
        // $json = A('WeChat')->http_curl($url);//为json数据
        // // dump($json);
        // $data = json_decode($json);
        // $json = json_decode($json);  //json转化为数组
        // dump($json);
        // $access_token = $json->access_token;//获取元素的值


        //name为json格式 避免的方法 "name":'.urlencode("微网站").',
        $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$access_token;

        $data =  '{
            "button": 
            [{
                "type":"view",
                "name":"微网站",
                "url":"http://172.16.0.112/jlh/index.php/index"
            },
            {
                "name":"扫码",
                "sub_button":[
                   {    
                       "type":"scancode_waitmsg",
                       "name":"扫码带提示",
                       "key":"扫码带提示"
                    },
                    {    
                       "type":"scancode_push",
                       "name":"扫码推事件",
                       "key":"扫码推事件"
                    },
                    {
                         "type":"miniprogram",
                         "name":"微信公众平台",
                         "url":"http://mp.weixin.qq.com",
                         "appid":"wx5c6818578b37fb75",
                         "pagepath":"pages/lunar/index"
                     },
                    {
                       "type":"click",
                       "name":"最新消息",
                       "key":"zuixin"
                    }]
            },
            {
                "name":"发图和位置",
                "sub_button":[
                   {    
                       "type":"pic_sysphoto",
                       "name":"系统拍照发图",
                       "key":"系统拍照发图"
                    },
                    {    
                       "type":"pic_photo_or_album",
                       "name":"拍照或者相册发图",
                       "key":"拍照或者相册发图"
                    },
                    {
                        "type":"pic_weixin",
                        "name":"微信相册发图",
                        "key":"微信相册发图"
                     },{
                        "type":"click",
                        "name":"历史消息",
                        "key":"lishi"
                     }]
            }       
            }]
        }';
        //发送POST请求传递数据
            
        $cd = $this->_request($url,true,POST,$data);
        echo $cd;

        // dump($cd);
        exit;

        // echo urlencode('http://2u4v6i.natappfree.cc/thinkphp/index.php/home/index/getUserInfo');
        //第一步：用户同意授权 获取code
        // $appid = wx5c6818578b37fb75;

         
        // $appsecret = 4b6c2c05625d657d2b1c13f15aa21372;

        $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx5c6818578b37fb75&redirect_uri=http%3A%2F%2F2u4v6i.natappfree.cc%2Fthinkphp%2Findex.php%2Fhome%2Findex%2Flogin&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';

// 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx5c6818578b37fb75&redirect_uri=http%3A%2F%2Fa9qdgx.natappfree.cc%2Fthinkphp%2Findex.php%2Fhome%2Findex%2Flogin&response_type=code&scope=snsapi_base&state=123#wechat_redirect'
// scope为snsapi_base 那么用户必须是关注了公众号才能取得信息
        echo '非常帅！';


        //首页
        
        // $this->fun1();
        // $this->fun2();
        //加载网页的配置文件
        //数据库的操作
        //将数据读取到页面中
        
        // echo U('Index/index');显示url

        #载入模板index.html
        
        // $this->display('index');
    }
    public function responseMsg(){
        $access_token = $this->_getAccessToken(C('WECHAT_APP_ID'),C('WECHAT_APP_SECRET'));
        $wechatObj = new wechatCallbackapiTest();
        $wechatObj->responseMsg();
        die;
        $time = time();
        //发送模板
        $textTpl = "
        <xml>
          <ToUserName><![CDATA[%s]]></ToUserName>
          <FromUserName><![CDATA[%s]]></FromUserName>
          <CreateTime>%s</CreateTime>
          <MsgType><![CDATA[%s]]></MsgType>
          <Content><![CDATA[%s]]></Content>
          <FuncFlag>0</FuncFlag>
        </xml>";//%s把变量格式化为字符串

        if($MsgType = "text"){
            //判断用户发送关键词是否为空
            if(!empty($keyword))
            {
                if($keyword = '文本')
                {
                    $MsgType = "text";
                    $contentStr = "你发送的是文本消息";
                    $resultStr = sprintf($text,$FromUserName,$ToUserName,$time,$MsgType,$contentStr);
                    echo $resultStr;
                }
            }else{
                echo "Input something...";
            }

        }


    }

//第一种文件形式储存access_token
    //获取令牌[access_token]
    public function _getAccessToken($appid,$appsecret){
        
        //指定保存文件位置
        if(!is_dir('./public/access_token/')){
            mkdir(iconv("UTF-8", "GBK", './public/access_token/'),0777,true); 
        }
        $file = './public/access_token/token';
        if(file_exists($file)){
            $content = file_get_contents($file);
            $cont = json_decode($content);
            if( (time()-filemtime($file)) < $cont->expires_in){
                //当前时间-文件创建时间<token过期时间
                return $cont->access_token;
            }
        }
        
        $curl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
        $content = $this->_request($curl);
        file_put_contents($file,$content);
        $cont = json_decode($content);
        return $cont->access_token;
        
    } 
    //设置网络请求配置
    public function _request($curl,$https=true,$method='GET',$data=null){
        // 创建一个新cURL资源
        $ch = curl_init();
        
        // 设置URL和相应的选项
        curl_setopt($ch, CURLOPT_URL, $curl);    //要访问的网站
        //启用时会将头文件的信息作为数据流输出。
        curl_setopt($ch, CURLOPT_HEADER, false);    
        //将curl_exec()获取的信息以字符串返回，而不是直接输出。
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
     
        if($https){
            //FALSE 禁止 cURL 验证对等证书（peer's certificate）。
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  //验证主机
        }
        if($method == 'POST'){
            curl_setopt($ch, CURLOPT_POST, true);  //发送 POST 请求
             //全部数据使用HTTP协议中的 "POST" 操作来发送。
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
        }
        
        
        // 抓取URL并把它传递给浏览器
        $content = curl_exec($ch);
     
        //关闭cURL资源，并且释放系统资源
        curl_close($ch);
        
        return $content;
    }   

//第二种session储存access_token  第三种存mysql memcache
//第二种方法中http_curl 好像调试出错 获取不到access_token???
    public function getWxaccessToken(){
        //将access_token 存在session/cookie中
        if($_SESSION['access_token'] && $_SESSION['expire_time']>time()){
            //如果access_token在session并没有过期
            echo 'if';

        }else{
            echo 'else';
            //如果access_token不存在或者已经过期，重新取
             $curl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.C('WECHAT_APP_ID').'&secret='.C('WECHAT_APP_SECRET');
             $res = $this->http_curl($url,'get','json');
             $access_token = $res['access_token'];
             //重新获取到的access_token存到session
             $_SESSION['access_token'] = $access_token;
             $_SESSION['expire_rime'] = time()+7000;

             return $access_token;

             die;
        }
    }
    /**
     * @param  [type] $url  接口url
     * @param  string $type 请求类型
     * @param  string $res  返回数据格式
     * @param  string $arr  post请求参数
     * @return [type]       [description]
     */
    public function http_curl($url,$type='get',$res='json',$arr='')
    {
        //1.初始化
        $ch = curl_init();
        //2.设置curl的参数
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        if ($type == 'post') {
            curl_setopt($ch,CURLOPT_POST,1);
            curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
        }
        //3.采集
        $output = curl_exec($ch);
        //4.关闭
        curl_close($ch);

        if($res == 'json'){
            return json_decode($output,true);
        }
    }
    

    // public function getUserInfo()
    // {
    //     $appid = C('appID');  
    //     $secret= C('appSecret');  
    //     $code = $_GET["code"];
    //      
    //     //第一步:取得openid
    //     $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
    //     $oauth2 = getJson($oauth2Url);
    //       
    //     //第二步:根据全局access_token和openid查询用户信息  
    //     $access_token = $oauth2["access_token"];  
    //     $openid = $oauth2['openid'];  
    //     $get_user_info_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN";
    //     $userinfo = getJson($get_user_info_url);
    //      
    //     //打印用户信息
    //       print_r($userinfo);
    //      
    //     function getJson($url){
    //         $ch = curl_init();
    //         curl_setopt($ch, CURLOPT_URL, $url);
    //         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    //         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
    //         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //         $output = curl_exec($ch);
    //         curl_close($ch);
    //         return json_decode($output, true);
    //     }

    // }
    
    /**
     * json方式封装通信接口
     * 通信数据标注格式： 
        code 状态码（200 400等） 
        message 提示信息（邮箱格式不正确；数据返回成功等） 
        data 返回相应的数据 
        —————————- 
        -JSON 
        code : 200 
        message ：”数据返回成功” 
        -data 
        id ：1 
        name : “测试” 
        {"code":200,"message":"\u6210\u529f\u54af","data":{"id":1,"name":"jiang"}}
     */
    
    public  function json($code,$message = '',$data = array())//封装json通信接口
    {
            if (!is_numeric($code)){
                return '错误';
            }
             $result = array(
                'code' => $code,
                'message' => $message,
                'data' => $data
        );
        echo json_encode($result);
        exit;
    }

    public function jsonsAction()
    {
            $arr = array(
                   'id' => 1,
                   'name' => 'jiang'
              );
            $k = $this->json(200,'成功咯',$arr);
            return $k;
    }    







    /* 这里是接收授权的code的 */
    public function login()
    {
       
        $code = $_GET["code"];
        $get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $WX_APPID . '&secret=' . $WX_SECRET . '&code=' . $code . '&grant_type=authorization_code';
        $json = $this->curl_post($get_token_url);
        $arr = json_decode($json, true);
        $token = $arr['access_token'];
        $openid = $arr['openid'];
        //拿到token后就可以获取用户基本信息了 
        $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $token . '&openid=' . $openid . '&lang=zh_CN';
        $json = $this->curl_post($url); //获取微信用户基本信息 
        $user_data = json_decode($json, true);
        print_r($user_data);

    }
    public function curl_post($url, $data) {
        $query_str = '';
        foreach ($data as $key => $value) {
        $query_str .= '&' . $key . '=' . $value;
        }
        $query_str = ltrim($query_str, '&');
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url); // 配置网关地址
        curl_setopt($ch, CURLOPT_HEADER, 0); // 过滤HTTP头
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1); // 设置post提交
        curl_setopt($ch, CURLOPT_POSTFIELDS, $query_str); // post传输数据
        $return_data = curl_exec($ch);
        curl_close($ch);
        return $return_data;

    }



//demo 数组JSON
    public function demo6()
    {
        $this->display();
    }
    public function dem6()
    {
        echo '我是远程获取的数据';
    }
    public function demo5()
    {
        $this->display();
    }
    public function dem5()
    {
        print_r($_POST);
    }
    public function demo4()
    {
        $this->display();
    }
    public function demo3()
    {
        $this->display();
    }
    public function dem3()
    {
        sleep(3);
        echo '[
           {
            "title":"否认放松计划生育政策",
            "publicTime":"2011-11-16"
           },
           {
            "title":"劳教制度简史",
            "publicTime":"2011-11-15"
           },
           {
            "title":"中共中央决定废除劳教制度",
            "publicTime":"2011-11-14"
           } 
        ]';
    }
    public function demo2()
    {
        $this->display();
    }
    public function dem2()
    {
        echo '[{"title":"ajax返回数组和json的组合格式"}]';
    }

    public function demoeval()
    {
        $this->display();
    }
//demo
    public function demo1()
    {
        $this->display();
    }
    public function demo()
    {
        echo "11";
    }
//load.html jQuery中load的使用
    public function load()
    {
        $this->display();
    }
    public function process()
    {
        $username = $_POST['username'];
        // $username = $_GET['username'];
        if($username == 'admin'){
            echo 'false';
        }else{
            echo 'true';
        }
    }
//jquery中的get提交
    public function get()
    {
        $this->display();
    }
//$.ajax的传值
    public function ajax()
    {
        $this->display();
    }



    //空方法操作的处理
    //第一种 设置一个方法
    function _empty(){
        echo "对不起，方法不存在";
    }
    //第二种 为空操作创建一个同名的模板

    //空控制器的处理
    //第一种制作一个控制器EmptyController.class.php下创建一个方法_empty

    public function lista(){
        //列表页
        #实例化info表的模型
        $obj = M("info");

        #读取数据
        $data = $obj->select();
        
        //$data = $obj->where("infoId >= 1 and infoId<=10")->order("infoId asc")->limit(0,2)->select();// $db->getMoreData(); $rs = array();  asc 升序 desc 降序
        //select * from info where infoId>=1 and infoId<=10 order by desc;
        #打印数组
        // echo '<pre>';
        // print_r($data);
        // echo '</pre>';
        // exit();

        $this->assign('data',$data);

        #传入 将数组数据传入模板中
        //$this->assign('abc',$rs);
        //$this->assign('标签名'，数据);
        #引入 载入模板list.html
        $this->display('list');
    }
    public function details(){
        $obj = M("info");
        #取一条数据
        $rs = $obj->where("infoId=2")->find();//$db->getOnedata();

        echo '<pre>';
        print_r($rs);
        echo '</pre>';
        //详细页
        $this->display('details');
    }
    public function addnews(){
        $this->display('addnews');
    }

    //内容填写不完整弹出 跳转  alert弹出跳转
    private function showMessage($m,$u){
        echo "<script type='text/javascript'>alert('".$m."');location.href='".$u."';</script>";
    }


    #接收表单数据并添加到数据库中
    public function savaNews(){
        #接收表单数据
        $title = $_POST['text'];
        $content = $_POST['content'];
        #判断数据是否合法
        if($title != '' && $content !=''){

            //$this->success('数据合法,'index');
            #将数据插入到数据库中
            $obj = M("info");//对inifo表操作
            $data['infoTitle'] = $title;
            $data['infoContent'] = $content;
            $data['infoDatetime'] = date('Y-m-d H:i:s');
            $result = $obj->add($data);
            //var_dump($result);
            $this->success('添加数据成功','index');
        }else{
            $this->error('内容填写不完整','index',3);
            //$this->showMessage('内容填写不完整','index') 当前页面弹框提醒
        }
    }

    #删除数据
    public function del(){
        $obj = M("info");
        $obj->where("infoId=1")->delete();
    }

    #更新数据
    public function updataData(){
        $obj = M("info");
        $data['infoTitle'] = '我管马匹了';
        $data['infoContent'] = '文章内容的跟新';
        $result = $obj->where("infoId=3")->save($data);
        var_dump($result);
    }

    #数据的传递
    public function data(){
        // $name = '立春';
        // $age = 32;
        // $sex = '男';
        // $arr1 = array(
        //     0 => 'aaa',
        //     1 => 'bbb',
        //     2 => 'ccc',
        //     );
        // $arr2 = range('A','Z');//range()小写字母顺序表
        
        $rs = M("info")->select();  
        // echo '<pre>';
        // print_r($rs);
        // echo '</pre>';exit;

        #数据传递
        $this->assign("data",$rs);
        // foreach ($data as $key => $value) {
        //     echo $value;   
        // }
        // $this->assign('name',$name);
        // $this->assign('age',$age);
        // $this->assign('sex',$sex);
        // $this->assign('arr1',$arr1);
        // $this->assign('arr2',$arr2);
        
        #引入模板 
        $this->display();

    }

    //一个方法可以对应多个模板
    public function adc(){
        $x = $_POST['x'];
        switch ($x) 
        {
            case 1 : $this->display('1');break;
            case 2 : $this->display('2');break;
            default : $this->display('ok');break;
        }
    }

    //跳转
    public function fun1(){
        //return 100;
        $this->success('信息',U('模块/控制器/操作'),2);
        $this->error('信息',U('模块/控制器/操作'),2);
        //$this->showMessage('信息','地址');
    }
    /*public function showMessage($m,$u){
        echo "<script>alert('".$m."');location.href='".$u."';</script>";
    }*/


    public function fun2(){
        return 200;
    }

    #验证码显示
    public function code(){
        #创建画布
        // $im = imagecreatetruecolor($width, $height);
        // imagepng($im);
        
        $config = array(
            // 'imageW' => '220px',
            // 'imageH' => '48px',
            'bg' => array(255,255,255),
            'useNoise' => false,
            'length' => 4,
            'useCurve' => true, //无曲线
            'fontttf' => 'ht.ttf',
            'useZh' => true,
            // 'zhSet' => 'hdaskjlhdlkj',

            // 'useZh' => true,
            // 'zhSet' => '撒打算沉迷在拉萨没打什么的了' ,
            );
        $Verify = new \Think\Verify($config);
        $Verify->entry();
    }

    #登录界面
    // public function login(){
    //     // echo md5('admin');
    //     $this->display('login');

    // }
    // public function check(){
    //     echo $_POST['name'];
    //     echo $_POST['age'];
    // }

    #接收登录信息并判断是否登录成功
    
    // public function check(){
    //     header("Content-type: text/html; charset=utf-8");
    //     $code=I('code');
    //     $verify = new \Think\Verify();
    //     if($verify->check_verify($code, 1)){
    //     echo "验证码正确!!!!";
    //     }else{
    //     $this->success("验证码错误!!!!");
    //     }
    // }

    // public function check_verify($code, $id = ''){
    //     $verify = new \Think\Verify();
    //     return $verify->check($code, $id);
    // }

    public function checklogin(){
        $Verify = new \Think\Verify();
        #接收文本框中的验证码s
        $code = $_POST['code'];
        if($Verify->check($code) == true){
            $this->success('验证码验证成功',U('Home/Index/login'),2);
        }else{
            $this->error('验证码错误',U('Home/Index/login'),2);
        }
        
    }
} 